package br.com.monitor.modelos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


public class InformacoesFisicas implements Serializable {
	
	private Double peso;
	private Double altura;
	private Double medidaPeito; 
	private Double medidaAbdomen;
	private Double medidaPerna;
	private Double medidaCintura;
	
	private List<Double> listaDeMedidasDePeso;
	private List<Double> listaDeMedidasDeAltura;
	private List<Double> listaDeMedidasDoPeito;
	private List<Double> listaDeMedidasDoAbdomen;
	private List<Double> listaDeMedidasDaPerna;
	private List<Double> listaDeMedidasDaCintura;
 	
	/**
	 *  
	 * @param peso Peso inicial da pessoa.
	 * @param altura Altura inicial da pessoa.
	 * @param medidaPeito Medida do Peito inicial da pessoa. 
	 * @param medidaAbdomen Medida do Abdomen inicial da pessoa.
	 * @param medidaPerna Medida da Perna inicial da pessoa.
	 * @param medidaCintura Medida da Cintura inicial da pessoa.
	 * 
	 */
	public InformacoesFisicas(Double peso, Double altura, Double medidaPeito, 
			Double medidaAbdomen, Double medidaPerna, Double medidaCintura) throws Exception {
		setPeso(peso);
		setAltura(altura);
		setMedidaPeito(medidaPeito);
		setMedidaAbdomen(medidaAbdomen);
		setMedidaPerna(medidaPerna);
		setMedidaCintura(medidaCintura);
		
		listaDeMedidasDePeso = new ArrayList<Double>();
		listaDeMedidasDePeso.add(peso);
		
		listaDeMedidasDeAltura = new ArrayList<Double>();
		listaDeMedidasDeAltura.add(altura);
		
		listaDeMedidasDoPeito = new ArrayList<Double>();
		listaDeMedidasDoPeito.add(medidaPeito);
		
		listaDeMedidasDaPerna = new ArrayList<Double>();
		listaDeMedidasDaPerna.add(medidaPerna);
		
		listaDeMedidasDaCintura = new ArrayList<Double>();
		listaDeMedidasDaCintura.add(medidaCintura);
	}

	/**
	 * 
	 * @param peso Peso da pessoa.
	 * @throws Exception Usa o setPeso(...).
	 */
	public void addPeso(Double peso) throws Exception {
		setPeso(peso);
		listaDeMedidasDePeso.add(peso);
	}
	
	/**
	 * 
	 * @param altura Altura da pessoa.
	 * @throws Exception Usa o setAltura(...).
	 */
	public void addAltura(Double altura) throws Exception {
		setAltura(altura);
		listaDeMedidasDeAltura.add(altura);
	}
	
	/**
	 * 
	 * @param medidaPeito Medida do Peito da pessoa.
	 * @throws Exception Usa o setMedidaPeito(...).
	 */
	public void addMedidaPeito(Double medidaPeito) throws Exception {
		setMedidaPeito(medidaPeito);
		listaDeMedidasDoPeito.add(medidaPeito);
	}
	
	/**
	 * 
	 * @param medidaPerna Medida da Perna da pessoa.
	 * @throws Exception Usa o setMedidaPerna(...).
	 */
	public void addMedidaPerna(Double medidaPerna) throws Exception {
		setMedidaPerna(medidaPerna);
		listaDeMedidasDaPerna.add(medidaPerna);
	}
	
	/**
	 * 
	 * @param medidaCintura Medida Cintura da pessoa.
	 * @throws Exception Usa o setMedidaCintura(...).
	 */
	public void addMedidaCintura(Double medidaCintura) throws Exception {
		setMedidaCintura(medidaCintura);
		listaDeMedidasDaCintura.add(medidaCintura);
	}
	
	/**
	 * 
	 * @return Retorna todos as medidas dos pesos da pessoa.
	 */
	public List<Double> getTodosPesos() {
		return listaDeMedidasDePeso;
	}
	
	/**
	 * 
	 * @return Retorna todas as medidas de altura da pessoa.
	 */
	public List<Double> getTodasAlturas() {
		return listaDeMedidasDeAltura;
	}
	
	/**
	 * 
	 * @return Retorna todas as medidas do peito da pessoa.
	 */
	public List<Double> getTodasMedidasPeito() {
		return listaDeMedidasDoPeito;
	}
	
	/**
	 * 
	 * @return Retorna todas as medidas do abdomen  da pessoa.
	 */
	public List<Double> getTodasMedidasAbdomen() {
		return listaDeMedidasDoAbdomen;
	}
	
	/**
	 * 
	 * @return Retorna todas as medidas da perna da pessoa.
	 */
	public List<Double> getTodasMedidasPerna() {
		return listaDeMedidasDaPerna;
	}
	
	/**
	 * 
	 * @return Retorna todas as medidas da cintura da pessoa.
	 */
	public List<Double> getTodasMedidasCintura() {
		return listaDeMedidasDaCintura;
	}
	
	/**
	 * 
	 * @return Retorna o peso atual.
	 */
	public Double getPeso() {
		return peso;
	}

	/**
	 * 
	 * @param peso Peso da pessoa.
	 * @throws Exception Lanca excecao se o peso for menor ou igual a zero.
	 */
	public void setPeso(Double peso) throws Exception {
		if(peso <= 0){
			throw new Exception("Peso invalido!");
		}
		this.peso = peso;
	}

	/**
	 * 
	 * @return Retora a altura atual.
	 */
	public Double getAltura() {
		return altura;
	}

	/**
	 * 
	 * @param altura Altura da pessoa.
	 * @throws Exception Lanca excecao se a altura for menor ou igual a zero.
	 */
	public void setAltura(Double altura) throws Exception{
		if(altura <= 0){
			throw new Exception("Altura invalida!");
		}
		this.altura = altura;
	}
	/**
	 * 
	 * @return Retorna a medida do peitoral em cm atual.
	 */
	public Double getMedidaPeito() {
		return medidaPeito;
	}

	/**
	 * 
	 * @param medidaPeito Medida do peito da pessoa.
	 * @throws Exception Lanca excecao se o valor for negativo ou zero.
	 */
	public void setMedidaPeito(Double medidaPeito) throws Exception{
		if(medidaPeito <= 0){
			throw new Exception("Medida invalida!");
		}
		this.medidaPeito = medidaPeito;
	}

	/**
	 * 
	 * @return Retorna a medida do abdomen em cm atual.
	 */
	public Double getMedidaAbdomen() {
		return medidaAbdomen;
	}

	/**
	 * 
	 * @param medidaAbdomen Medida do Abdomen da pessoa.
	 * @throws Exception Lanca excecao se o valor for menor ou igual a zero.
	 */
	public void setMedidaAbdomen(Double medidaAbdomen) throws Exception{
		if(medidaAbdomen <= 0){
			throw new Exception("Medida invalida!");
		}
		this.medidaAbdomen = medidaAbdomen;
	}

	/**
	 * 
	 * @return Retorna a medida da perna em cm.
	 */
	public Double getMedidaPerna() {
		return medidaPerna;
	}

	/**
	 * 
	 * @param medidaPerna Medida da Perna pessoa .
	 * @throws Exception Lanca excecao se o parametro for menor ou igual a zero.
	 */
	public void setMedidaPerna(Double medidaPerna) throws Exception{
		if(medidaPerna <= 0){
			throw new Exception("Medida invalida!");
		}
		this.medidaPerna = medidaPerna;
	}

	/**
	 * 
	 * @return Retorna a medida da cintura em cm.
	 */
	public Double getMedidaCintura() {
		return medidaCintura;
	}

	/**
	 * 
	 * @param medidaCintura Medida da Cintura da pessoa.
	 * @throws Exception Lanca excecao se o valor for menor ou igual a zero.
	 */
	public void setMedidaCintura(Double medidaCintura) throws Exception{
		if(medidaCintura <= 0){
			throw new Exception("Medida invalida!");
		}
		this.medidaCintura = medidaCintura;
	}

}